package org.madmatrix.glib.util;

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;

/**
 * 日期时间工具
 * 
 * @author madmatrix
 */
public class DateUtil {

	public static final String PATTERN_DATE_TIME = "yyyy-MM-dd HH:mm:ss";
	public static final String PATTERN_DATE = "yyyy-MM-dd";
	public static final String PATTERN_TIME = "HH:mm:ss";

	public static SimpleDateFormat formatter = new SimpleDateFormat(PATTERN_DATE_TIME, Locale.getDefault());
	
	/**
	 * 获取当前时间的秒，24小时制
	 * 
	 * @return
	 */
	public static int getCurrentSecond() {
		String currentTime = getCurrentTime();
		return Integer.parseInt(currentTime.substring(currentTime.lastIndexOf(':') + 1));
	}
	
	/**
	 * 获取当前时间的分，24小时制
	 * 
	 * @return
	 */
	public static int getCurrentMinute() {
		String currentTime = getCurrentTime();
		return Integer.parseInt(currentTime.substring(currentTime.indexOf(':') + 1, currentTime.lastIndexOf(':')));
	}
	
	/**
	 * 获取当前时间的时，24小时制
	 * 
	 * @return
	 */
	public static int getCurrentHour() {
		String currentTime = getCurrentTime();
		return Integer.parseInt(currentTime.substring(0, currentTime.indexOf(':')));
	}
	
	/**
	 * 获取当前日期，格式yyyy-MM-dd
	 * 
	 * @return
	 */
	public static String getCurrentDate() {
		String currentDateTime = getCurrentDateTime();
		return currentDateTime.substring(0, currentDateTime.indexOf(' '));
	}
	
	/**
	 * 获取当前时间，格式HH:mm:ss
	 * 
	 * @return
	 */
	public static String getCurrentTime() {
		String currentDateTime = getCurrentDateTime();
		return currentDateTime.substring(currentDateTime.indexOf(' ') + 1);
	}

	/**
	 * 获取当前的日期时间，日期时间格式：yyyy-MM-dd HH:mm:ss
	 * 
	 * @return 
	 */
	public static String getCurrentDateTime() {
		return format(PATTERN_DATE_TIME, System.currentTimeMillis());
	}

	/**
	 * 将时间戳格式化为日期时间，格式：yyyy-MM-dd HH:mm:ss
	 * 
	 * @param timeMills
	 * @return 
	 */
	public static String formatDateTime(long timeMills) {
		return format(PATTERN_DATE_TIME, timeMills);
	}

	/**
	 * 将时间戳格式化为时间，格式：HH:mm:ss
	 * 
	 * @param timeMills
	 * @return 
	 */
	public static String formatTime(long timeMills) {
		return format(PATTERN_TIME, timeMills);
	}

	/**
	 * 将时间戳格式化为日期，格式：yyyy-MM-dd
	 * 
	 * @param timeMills
	 * @return 
	 */
	public static String formatDate(long timeMills) {
		return format(PATTERN_DATE, timeMills);
	}

	/**
	 * 用指定的格式来格式化时间戳，pattern为空则返回null
	 * 
	 * @param pattern
	 * @param timeMills
	 * @return 
	 */
	public static String format(String pattern, long timeMills) {
		if (null == pattern || pattern.length() == 0) {
			return null;
		}

		formatter.applyPattern(pattern);
		return formatter.format(new Date(timeMills));
	}

	/**
	 * 将日期时间字符串解析为java.util.Date
	 * 
	 * @param dateTimeString
	 *            格式必须为yyyy-MM-dd HH:mm:ss
	 * @return 如果字符串为空，或者格式不正确，则返回null
	 */
	public static Date parseDateTime(String dateTimeString) {
		return parse(PATTERN_DATE_TIME, dateTimeString);
	}

	/**
	 * 将日期时间字符串解析为java.util.Date
	 * 
	 * @param dateString
	 *            格式必须为yyyy-MM-dd
	 * @return 如果字符串为空，或者格式不正确，则返回null
	 */
	public static Date parseDate(String dateString) {
		return parse(PATTERN_DATE, dateString);
	}

	/**
	 * 将日期时间字符串解析为java.util.Date
	 * 
	 * @param timeString
	 *            格式必须为HH:mm:ss
	 * @return 如果字符串为空，或者格式不正确，则返回null
	 */
	public static Date parseTime(String timeString) {
		return parse(PATTERN_TIME, timeString);
	}

	/**
	 * 用指定的日期时间格式来解析timeString为java.util.Date类型
	 * 
	 * @param pattern
	 *            符合yyyy-MM-dd或HH:mm:ss或yyyy-MM-dd HH:mm:ss格式
	 * @param timeString
	 * @return 解析失败、pattern为空、timeString为空返回null
	 */
	public static Date parse(String pattern, String timeString) {
		if (null != pattern && pattern.length() > 0 && null != timeString && timeString.length() > 0) {
			try {
				formatter.applyPattern(pattern);
				return formatter.parse(timeString);
			} catch (ParseException e) {
				return null;
			}
		}

		return null;
	}

}